package com.rectcircle.scalatrateset.model

import java.util.concurrent.atomic.AtomicInteger

import org.scalatra.commands._
import com.rectcircle.scalatrateset.command.commandsupport._

import scala.util.control.Exception._
import org.scalatra.validation._

/**
  * @author Rectcircle
  *         createTime 2017/1/6
  */
case class Todo(id: Integer, name: String, done: Boolean = false)

object TodoData {
	
	/** 一个计数器变量来伪造我们的自动递增主键 **/
	val idCounter = new AtomicInteger(3)
	
	/**
	  * 一些假数据，所以我们可以模拟检索。
	  */
	var all = List(
		Todo(1, "Shampoo the cat"),
		Todo(2, "Wax the floor"),
		Todo(3, "Scrub the rug"))
	
	/** 返回尚未完成的Todos数。 **/
	def remaining = {
		all.filterNot(_.done == true).length
	}
	
	/** 将一个新的Todo对象添加到todos的现有列表，然后对列表进行排序。
	  */
	def add(todo: Todo): List[Todo] = {
		all ::= todo
		all = all.sortBy(_.id)
		all
	}
	
//	def add(todo: Todo): ModelValidation[Todo] = {
//		allCatch.withApply(errorFail) {
//			all ::= todo
//			all = all.sort((e1, e2) => (e1.id < e2.id))
//			todo.successNel
//		}
//	}
	
	/** Throw a validation error if something explodes when adding a Todo **/
//	def errorFail(ex: Throwable) = ValidationError(ex.getMessage, UnknownError).failNel
	
	/** 使用自动递增的主键ID实例化一个新的`Todo`对象。 **/
	def newTodo(name: String) = Todo(idCounter.incrementAndGet, name)
	
}